//#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//using namespace std;
//#include <vector>
//
//int ans = 0;
//vector<int> path;
//
//void DFS(vector<int>& nums, vector<bool>& used) {
//    if (path.size() == nums.size()) {
//        ans++;
//        return;
//    }
//
//    for (int i = 0; i < nums.size(); i++) {
//        if (used[i] == true) {
//            continue;
//        }
//        if (path.size() == 0) {
//            path.push_back(nums[i]);
//            used[i] = true;
//        }
//        else {
//            int tail = path[path.size() - 1];
//            if (nums[i] % tail == 0 || tail % nums[i] == 0) {
//                path.push_back(nums[i]);
//                used[i] = true;
//            }
//            else {
//                continue;
//            }
//        }
//        DFS(nums, used);
//        path.pop_back();
//        used[i] = false;
//    }
//}
//
//
//int specialPerm(vector<int>& nums) {
//    vector<bool> used(nums.size(), false);
//    DFS(nums, used);
//    int n = 1e9 + 7;
//
//    return ans % n;
//}
//
//int main()
//{
//    vector<int> nums;
//    //nums.push_back(2);
//    //nums.push_back(3);
//    //nums.push_back(6);
//
//    nums.push_back(1);
//    nums.push_back(4);
//    nums.push_back(3);
//    
//    specialPerm(nums);
//    cout << ans << endl;
//    return 0;
//}